package com.sunhao.springboot_satoken.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.StpUtil;
import com.sunhao.springboot_satoken.utils.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试控制器
 * 用于测试基于角色的权限控制
 * @author SunHao
 */
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {

    /**
     * 公共接口，无需登录即可访问
     * @return 响应结果
     */
    @GetMapping("/public")
    public Response publicApi() {
        Map<String, Object> data = new HashMap<>();
        data.put("message", "这是一个公共接口，无需登录即可访问");
        data.put("isLogin", StpUtil.isLogin());
        return new Response("200", "操作成功", data);
    }

    /**
     * 用户接口，需要登录才能访问
     * @return 响应结果
     */
    @SaCheckLogin
    @GetMapping("/user")
    public Response userApi() {
        Map<String, Object> data = new HashMap<>();
        data.put("message", "这是一个需要登录才能访问的接口");
        data.put("userId", StpUtil.getLoginId());
        return new Response("200", "操作成功", data);
    }

    /**
     * 管理员接口，需要管理员角色才能访问
     * @return 响应结果
     */
    @SaCheckRole("admin")
    @GetMapping("/admin")
    public Response adminApi() {
        Map<String, Object> data = new HashMap<>();
        data.put("message", "这是一个需要管理员角色才能访问的接口");
        data.put("userId", StpUtil.getLoginId());
        return new Response("200", "操作成功", data);
    }

    /**
     * 普通用户接口，需要普通用户角色才能访问
     * @return 响应结果
     */
    @SaCheckRole("user")
    @GetMapping("/normal")
    public Response normalUserApi() {
        Map<String, Object> data = new HashMap<>();
        data.put("message", "这是一个需要普通用户角色才能访问的接口");
        data.put("userId", StpUtil.getLoginId());
        return new Response("200", "操作成功", data);
    }
}